package br.com.controlcivil.webservices;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import org.jboss.resteasy.annotations.providers.multipart.PartType;

import controllcivil.bean.Consumo;
import controllcivil.bean.FornecedorMaterial;
import controllcivil.bean.Material;
import controllcivil.excecao.ExceptionCRUD;
import controllcivil.excecao.ExceptionRegraNegocio;
import controllcivil.interfaces.IConsumo;
import controllcivil.interfaces.IFornecedorMaterial;
import controllcivil.interfaces.IGeneric;
import controllcivil.interfaces.IMaterial;
import controllcivil.interfaces.IUsuario;

@WebService()
@Stateless()
public class Consumidor {
	
	@EJB
	private IMaterial material;
	
	@EJB
	private IConsumo consumoEJB;
	
	@EJB
	private IFornecedorMaterial fornecedorEJB;
	
	
	@EJB
	private IUsuario usuarioEJB;
	
	
	public Consumidor() {
		System.out.println("DENTRO DO WEB SERVICE");
	}
	
	
	@WebMethod(operationName = "usuarioValido")
	public boolean usuarioValido(@WebParam(name = "login") String login, 
								 @WebParam(name = "senha") String senha){
	
		try {
			return usuarioEJB.isUsuarioValido(login, senha);
		
		} catch (Exception e) {			
			e.printStackTrace();
		}
		
		return false;
	}

	@WebMethod(operationName = "recuperarListaMateriais")
	public String recuperarListaMateriais(){
		List<Material> materialEstoque = material.getListaMateriais(IGeneric.ORDER_BY_ASC);
		
		for (Material material : materialEstoque) {
			material.setListaFornecedores(null);
			material.setListaPedidoMaterial(null);
		}
		ImpGeradorXML geradorXML = ImpGeradorXML.iniciar();		
		return geradorXML.converterParaXML(materialEstoque);
	}
	
	
	@WebMethod(operationName = "recuperarFornecedorMateriais")
	public String recuperarFornecedorMateriais(){
		List<FornecedorMaterial> fornecedorMateriais = this.fornecedorEJB.recuperarListaFornecedoresMateriais(Boolean.TRUE, Boolean.TRUE);
		
		for (FornecedorMaterial fornecedor : fornecedorMateriais) {
			fornecedor.setListaConsumo(null);
			fornecedor.setPedidoMaterial(null);
			fornecedor.setPessoaJuridica(null);
		}
		ImpGeradorXML geradorXML = ImpGeradorXML.iniciar();		
		return geradorXML.converterParaXML(fornecedorMateriais);
	}
	
	
	@WebMethod(operationName = "atualizarMaterialConsumido")
	public String atualizarMaterialConsumido(int idMaterial, int idFornecedor, Double quantidadeConsumida){
		try {
			
			try {
				Consumo consumo = this.consumoEJB.preencherConsumo(idMaterial, idFornecedor, quantidadeConsumida);
				this.consumoEJB.salvar(consumo);
			
			} catch (ExceptionCRUD e) {
				e.printStackTrace();
				return e.getMensagem();
			}
			
		} catch (ExceptionRegraNegocio e) {
			e.printStackTrace();
			return e.getMensagem();
		}
		
		return "success";
	}
	
	
	
	

	
	
}
